# coding=utf-8
def is_valid_sentence(sentence):
    # 用于跟踪当前解析位置的索引
    index = [0]  # 使用列表作为可变对象来跟踪索引
    
    # 递归解析函数
    def parse():
        # 检查是否已经到达字符串末尾
        if index[0] >= len(sentence):
            return False
        current_char = sentence[index[0]]
        # 规则0：单个字母p-z是正确的句子
        if 'p' <= current_char <= 'z':
            index[0] += 1
            return True
        # 规则1：Ns是正确的句子，其中s是正确的句子
        elif current_char == 'N':
            index[0] += 1  # 跳过N
            return parse()  # 递归解析
        # 规则2：Cst、Dst、Est、Ist是正确的句子，其中s和t都是正确的句子
        elif current_char in ['C', 'D', 'E', 'I']:
            index[0] += 1  # 跳过C/D/E/I
            # 解析s
            if not parse():
                return False
            # 解析t
            return parse()
        # 其他情况都是无效的
        else:
            return False
    # 开始解析
    is_valid = parse()
    # 确保整个字符串都被解析完毕
    return is_valid and index[0] == len(sentence)
def main():
    import sys
    # 读取所有输入行
    for line in sys.stdin:
        # 去除行末的换行符
        sentence = line.strip()
        # 检查句子是否符合语法
        if is_valid_sentence(sentence):
            print("YES")
        else:
            print("NO")
if __name__ == "__main__":
    main()